home *** CD-ROM | disk | FTP | other *** search
/ Cracking 2 / Cracking II..iso / Texty / crackme / CRC.ASM < prev    next >
Encoding:
Assembly Source File  |  1999-01-28  |  3.8 KB  |  271 lines

  1. ;
  2. ;    This programm is extremelly slow. Don't run it.
  3. ;    It is only for example for step 2.
  4. ;
  5.     .model tiny
  6.     .486
  7.     .code
  8.     .startup
  9.     org 100h
  10.  
  11.     jmp @0
  12.     
  13.         include msg.inc
  14.         include debug.inc
  15.  
  16. UpdateBytes    macro
  17.     mov edx,newcrc
  18.     movzx ebx,byte ptr [Key0]
  19.     xor   bl,dl
  20.     shr edx,8
  21.     xor edx,Magic32[ebx*4]
  22.  
  23.     movzx ebx,byte ptr [Key1]
  24.     xor   bl,dl
  25.     shr edx,8
  26.     xor edx,Magic32[ebx*4]
  27.     
  28.     mov bl,byte ptr [Key2]
  29.     xor   bl,dl
  30.     shr edx,8
  31.     xor edx,Magic32[ebx*4]
  32.     
  33.     mov bl,byte ptr [Key3]
  34.     xor   bl,dl
  35.     shr edx,8
  36.     xor edx,Magic32[ebx*4]
  37.     
  38.     mov bl,byte ptr [Key4]
  39.     xor   bl,dl
  40.     shr edx,8
  41.     xor edx,Magic32[ebx*4]
  42.  
  43.     mov al,dl
  44.     xor al,crc4i
  45.     mov _b1,al
  46.     shr edx,8
  47.     xor edx,dword ptr crc4
  48.  
  49.     mov al,dl
  50.     xor al,crc3i
  51.     mov _b2,al
  52.     shr edx,8
  53.     xor edx,dword ptr crc3
  54.  
  55.     mov al,dl
  56.     xor al,crc2i
  57.     mov _b3,al
  58.     shr edx,8
  59.     xor edx,dword ptr crc2
  60.     
  61.     mov al,dl
  62.     xor al,crc1i
  63.     mov _b4,al
  64. endm
  65.     
  66. _real32    dword 0
  67.  
  68. NewCrc    dword 0
  69. crc16    word 0
  70.     
  71. FullCrc:
  72.     _d    byte 0
  73.     _c    byte 0
  74.     _b    byte 0
  75.     _a    byte 0
  76. Crc1:
  77.     _4    byte 0
  78.     _3    byte 0
  79.     _2    byte 0
  80.     _1    byte 0
  81. Crc2:
  82.         byte 0
  83.     _7    byte 0
  84.     _6    byte 0
  85.     _5    byte 0
  86. Crc3:
  87.         byte 0
  88.         byte 0
  89.     _9    byte 0
  90.     _8    byte 0
  91. Crc4:
  92.         byte 0
  93.         byte 0
  94.         byte 0
  95.     _10    byte 0
  96.  
  97. Crc1i        byte 0
  98. Crc2i        byte 0
  99. Crc3i        byte 0
  100. Crc4i        byte 0
  101.  
  102. Key        byte 256-8-1 dup(0)
  103.  
  104. Key0        byte 1
  105. Key1        byte 0
  106. Key2        byte 0
  107. Key3        byte 0
  108. Key4        byte 0
  109.  
  110. _b1        byte 0
  111. _b2        byte 0
  112. _b3        byte 0
  113. _b4        byte 0
  114.  
  115. ;_ebx        dword 0
  116. ;_h        word 0
  117. ;log        byte 'crclog',0
  118.  
  119. Magicon        equ 0edb88320h
  120.  
  121. Magic32        dword 256 dup(1)
  122. Cache32        byte 256 dup(2,2,2,2,2)
  123.  
  124. @0:
  125.  
  126.     call InitMagic32
  127.  
  128.     mov eax,_real32
  129.     mov dword ptr FullCrc,eax
  130.     
  131.     mov edx,0    
  132.     lea si,Key
  133.     mov cx,256-8-1
  134.     cld
  135.     xor ebx,ebx
  136. @10:    mov bl,byte ptr [si]
  137.     inc si
  138.     xor bl,dl
  139.     shr edx,8
  140.     xor edx,Magic32[ebx*4]
  141.     loop @10
  142.     mov dword ptr newcrc,edx
  143.     call CalcBytes
  144.  
  145.     mov eax,12340000h
  146.     push 0B800h
  147.     pop gs
  148.     
  149. @e2:    
  150.     
  151.     push eax
  152.     mov dword ptr Key1,eax
  153.  
  154.     UpdateBytes    
  155.  
  156.     xor eax,eax
  157.     xor ebx,ebx
  158.     mov    si, offset Key0-3
  159.  
  160.     REPT 9
  161.         local @@1
  162.         movsx   cx,byte ptr [si]
  163.         mov     ax,[si+1]
  164.         
  165.         inc    si        
  166.         mul    cx
  167.         
  168.         mov    cl, [si+2]
  169.     @@1:    rol    eax, cl
  170.         xor    ebx, eax
  171.         push    cx
  172.         movsx    cx, al
  173.         rol    ebx, cl
  174.         pop    cx
  175.         not    eax
  176.         loop    @@1
  177.     ENDM
  178.     
  179.     cmp    ebx, 0A69EC24Eh
  180.     jz    @ok
  181.     
  182.     pop eax
  183.     inc al
  184.     jnz @e2
  185.     mov byte ptr gs:[0],ah
  186.     inc ah
  187.     jnz @e2
  188.         
  189.     @Message 'fuck! ',0
  190.     retn
  191.     
  192.  
  193. @ok:    pop eax
  194.     lea si,Key1
  195.     mov cx,8
  196. @ok2:    lodsb
  197.     call $ShowAL
  198.     $ShowSymb ' '
  199.     loop @ok2
  200.     call $Next_Line    
  201.     lea dx,fname
  202.     mov ax,3C00h
  203.     xor cx,cx
  204.     int 21h
  205.     xchg ax,bx
  206.     lea dx,Key
  207.     mov cx,256
  208.     mov ah,40h
  209.     int 21h
  210.     mov ah,3Eh
  211.     int 21h
  212.     retn
  213. fname    db '!ok!',0
  214.  
  215. InitMagic32:
  216.                 std
  217.                 mov     di,OFFSET Magic32+0400h-4    ; Last WORD of the array
  218.                 mov     dx,0FFh
  219. im0:            mov     cx,8
  220.                 movzx    eax,dx
  221. im1:            shr     eax,1
  222.                 jnc     im2
  223.                 xor     eax,Magicon
  224. im2:            loop    im1
  225.                 stosd
  226.                 push eax
  227.                 shr eax,24
  228.                 lea si,Cache32[eax+eax*4]
  229.                 pop dword ptr [si]
  230.                 mov [si+4],dl
  231.                 dec     dx
  232.                 jns     im0
  233.                 cld
  234.                 ret
  235. CalcBytes:
  236.     movzx eax,_a
  237.     mov cl,Cache32[eax*4+eax+4]
  238.     mov eax,dword ptr Cache32[eax*4+eax]
  239.     
  240.     mov dword ptr crc1,eax
  241.     mov crc1i,cl
  242.     
  243.     movzx eax,_b
  244.     xor al,_2
  245.     mov cl,Cache32[eax*4+eax+4]
  246.     mov eax,dword ptr Cache32[eax*4+eax]
  247.     mov dword ptr crc2,eax
  248.     mov crc2i,cl
  249.  
  250.     movzx eax,_c
  251.     xor al,_3
  252.     xor al,_6
  253.     mov cl,Cache32[eax*4+eax+4]
  254.     mov eax,dword ptr Cache32[eax*4+eax]
  255.     mov dword ptr crc3,eax
  256.     mov crc3i,cl
  257.  
  258.     movzx eax,_d
  259.     xor al,_4
  260.     xor al,_7
  261.     xor al,_9
  262.     mov cl,Cache32[eax*4+eax+4]
  263.     mov eax,dword ptr Cache32[eax*4+eax]
  264.     mov dword ptr crc4,eax
  265.     mov crc4i,cl
  266.     retn
  267.  
  268.  
  269. end
  270.  
  271.